查看原文
其他

​教程资源​ | 嗨玩本源QPanda 2,从量子逻辑门实例开始学起!

OriginQ 本源量子 2021-02-13

biubiubiu~看这里

小编今天

为大家带来了新一波干货

本源QPanda 2系列教程

和大家正式打招呼啦

接下来让我们一起开启

QPanda 2的神奇冒险吧!



QPanda 2是由本源量子开发的开源量子计算框架,它可以用于构建、运行和优化量子算法。QPanda 2作为本源量子计算系列软件的基础库,为QRunes、Qurator、量子计算服务提供核心部件。

QPanda 2的独特优势
1支持多种量子语言

QPanda 2可对接不同量子计算平台,并将编写的量子程序编译到不同量子计算平台所对应的量子语言,目前已支持QASM、QRunes、Quil等多种量子语言;

2工具丰富

QPanda 2可根据真实量子计算机的数据参数,提供量子线路优化/转换工具,方便用户探索NISQ装置上具有实用价值的量子算法;

3功能齐全

QPanda 2提供本地的部分振幅、单振幅、全振幅、含噪声量子虚拟机,并可直接连接到本源的量子云服务器,运行量子程序。

QPanda 2教程设置了五大章节:深入学习、工具组件、量子程序转换算法组件VQNet,每一章节在内容上都进行了具体地说明介绍以及实例展示。

除此之外,为了兼容高效与便捷,QPanda 2提供了C++ 和 Python两个版本,你可以进行下载并安装。

通过上述简单介绍,相信大家对QPanda 2已经有了整体的了解。接下来小编将为大家带来QPanda 2的首波干货——量子逻辑门

量子逻辑门

经典计算中,最基本的单元是比特,而最基本的控制模式是逻辑门。我们可以通过逻辑门的组合来达到控制电路的目的。类似地,处理量子比特的方式就是量子逻辑门。使用量子逻辑门,可以有意识的使量子态发生演化,所以量子逻辑门是构成量子算法的基础。

量子逻辑门由酉矩阵表示最常见的量子逻辑门在一个或两个量子位的空间上工作,就像常见的经典逻辑门在一个或两个量子位上操作一样。

常见量子逻辑门矩阵形式

单比特量子逻辑门:

多比特量子逻辑门:

QPanda 2将所有的量子逻辑门封装为API,提供用户使用,并可获得QGate类型的返回值。比如,你想要使用Hadamard门,可以通过如下方式获得:

QGate h = H(qubit);

从上可知,H函数只接收一个qubit,qubit如何申请会在接下来的全振幅量子虚拟机部分进行具体介绍。

再比如,你想要使用RX门,就可以通过如下方式获得:

QGate rx = RX(qubit,PI);

如上所示,RX门接收两个参数,第一个是目标量子比特,第二个偏转角度。你也可以通过相同的方式使用RY、RZ门。

两比特量子逻辑门的使用和单比特量子逻辑门的用法相似,只不过是输入的参数不同,举个使用CNOT的例子:

QGate cnot = CNOT(control_qubit,target_qubit);

CNOT门接收两个参数,第一个是控制比特,第二个是目标比特。

接口介

在教程开头小编已提到过,所有的量子逻辑门都是酉矩阵,那么你也可以对量子逻辑门做转置共轭操作。QGate类型有两个成员函数可以做转置共轭操作:dagger、setDagger。

setDagger的作用是根据输入参数更新当前量子逻辑门的dagger标记,在计算时后端会根据dagger判断当前量子逻辑门是否需要执行转置共轭操作。举个例子:

auto gate = H(qubit);
gate.setDagger(true);

注解

setDagger有一个布尔类型参数,用来设置当前逻辑门是否需要转置共轭操作。

dagger的作用是复制一份当前的量子逻辑门,并更新复制的量子逻辑门的dagger标记。举个例子:

QGate rx_dagger = RX(qubit,PI).dagger();

除了转置共轭操作,你也可以为量子逻辑门添加控制比特。添加控制比特后,当前量子逻辑门是否执行,需要根据控制比特的量子态决定。如果控制比特的量子态为|1>态时,当前量子逻辑门可被执行;如果控制比特的量子态为|0>时,当前量子逻辑门不会被执行。QGate类型有两个成员函数帮助您添加控制比特:control、setControl。

setControl的作用是给当前的量子逻辑门添加控制比特,例如:

auto gate = RX(qubit,PI)
gate.setControl(qvec);

control的作用是复制当前的量子逻辑门,并给复制的量子逻辑门添加控制比特,例如:

QGate rx_control = RX(qubit,PI).control(qvec);

注解

setControl、control都需要接收一个参数,参数类型为QVec,QVec是qubit的vector。

实例

以下实例主要展现的是QGate类型接口的使用方式。我们先使用init接口初始化一个量子虚拟机,向量子虚拟机申请3个量子比特,并把q[0],q[1]存放在一个量子比特容器中。接着,调用CreateEmptyQProg构建一个量子程序prog,然后我们可以通过 << 操作符把量子逻辑门插入到prog中。最后调用qprobRunTupleList概率测量运行接口,就可以得到计算结果了。

计算结果如下:

000:0.5

010:0.5

★以上即为QPanda 2量子逻辑门的详细内容介绍。

★感兴趣的欢迎加入"QPanda 2开发交流群"。(关注“本源量子”公众号,回复“加群”,联系小编即可)

★PC端学习量子计算请登录learn-quantum.com  

★掌上学习请下载"本源溯知APP"

★如有疑问可上量子互动论坛,与我们的大神进行交流讨论。

往期精彩回顾

本源QPanda全装备教你量子软件编程

QPanda更新带来4种量子虚拟机+2种开发工具

【新品】国内首款量子软件开发包QPanda 2.0 升级发布!

Origin Q发布国内首款量子软件开发包Q-Panda

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存